
package Clases;

import java.awt.List;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;

/**
 *
 * @author Pavilion
 */
public class Propiedades {

    private String direccion;
    private String designacionCatastro;
    private float baseImponible;
    private String designacionCatastroString;
    private String baseImponibleString;
    private float superficie_cubierta;
    private float superficie_total;
    private String superficieCubiertaString;
    private String superficieTotalString;
    private int id_inmueble;
    private int pendientes;
    private int zona;
    private int mes;
    private int anio;
    private String periodo;
    private int id_boleta;
    private String cuenta;
    private String codigo;
    private String catastro;
    private int id_usuario;
    
    public Propiedades() {
    
    }

    public String getDireccion() {
        return (direccion);
    }
    public void setDireccion(String value) {
        this.direccion = value;
    }

    public String getDesignacionCatastro() {
        return designacionCatastro;
    }
    public void setDesignacionCatastro(String value) {
        this.designacionCatastro = value;
    }

    public String getBaseImponibleString() {
       DecimalFormat fd = new DecimalFormat ("#,##0.00");
       String baseFormat = fd.format(baseImponible);
       return baseFormat;
    }

    public void setBaseImponibleString(String value){
        this.baseImponibleString = value;
    }

    public float getBaseImponible() {
       return baseImponible;
    }

    public void setBaseImponible(float value) {
        this.baseImponible = value;
    }

    public int getZona() {
       return zona;
    }

    public void setZona(int value) {
        this.zona = value;
    } 
    
    public float getSuperficie_Cubierta() {
        return superficie_cubierta;
    }
    public void setSuperficie_Cubierta(float value) {
        this.superficie_cubierta = value;
    }

   public String getSuperficieCubiertaString() {
       DecimalFormat fd = new DecimalFormat ("#,##0.00");
       String superficieFormat = fd.format(superficie_cubierta);
       return superficieFormat;
    }

    public float getSuperficie_Total() {
        return superficie_total;
    }
    
    public void setSuperficie_Total(float value) {
        this.superficie_total = value;
    }

   public String getSuperficieTotalString() {
       DecimalFormat fd = new DecimalFormat ("#,##0.00");
       String superficieFormat = fd.format(superficie_total);
       return superficieFormat;
    }   
    public int getIDInmueble() {
        return id_inmueble;
    }
    public void setIDInmueble(int value) {
        this.id_inmueble = value;
    }

    public int getPendientes() {
        return pendientes;
    }

    public void setPendientes(int value) {
        this.pendientes = value;
    }

    public int getMes () {
        return mes;
    }

    public void setMes (int value) {
        this.mes=value;
    }

    public int getAnio () {
        return anio;
    }

    public void setAnio (int value) {
        this.anio=value;
    }

    public String getPeriodo () {
        return periodo;
    }

    public void setPeriodo (String value) {
        this.periodo=value;
    }    

    public void setIDBoleta (int value) {
        this.id_boleta=value;
    }

    public int getIDBoleta () {
        return id_boleta;
    }
    
    public String getCuenta () {
        return cuenta;
    }

    public void setCuenta (String value) {
        this.cuenta=value;
    }
    public String getCodigo () {
        return codigo;
    }

    public void setCodigo (String value) {
        this.codigo=value;
    }  

     public String getCatastro () {
        return catastro;
    }

    public void setCatastro (String value) {
        this.catastro=value;
    }   
    
    public int getId_usuario() {
       return id_usuario;
    }

    public void setId_usuario(int value) {
        this.id_usuario = value;
    }
    
    public void cargarInmueble (int id_inmueble){
        int status;
        Connection miConexion = ConectarBD.getConnection();
        ResultSet miRs = null;
        String miQuery = "select *, (select count(*) from impuesto_inmuebles where estado=0 and id_inmueble=?) as pendientes from inmueble where id_inmueble=?" ;
        try {
            PreparedStatement miStm = (PreparedStatement) miConexion.prepareStatement(miQuery);
            miStm.setInt(1, id_inmueble);
            miStm.setInt(2, id_inmueble);
            miRs = miStm.executeQuery();
                if (miRs.next())
                {
                           this.baseImponible = miRs.getFloat("valor_fiscal");
                           this.baseImponibleString=this.getBaseImponibleString();
                           this.designacionCatastro = miRs.getString("catastro");
                           this.direccion = miRs.getString("direccion");
                           this.superficie_cubierta=miRs.getFloat("sup_cub");
                           this.superficieCubiertaString=this.getSuperficieCubiertaString();
                           this.superficie_total=miRs.getFloat("sup_total");
                           this.superficieTotalString=this.getSuperficieTotalString();    
                           this.zona=miRs.getInt("zona"); 
                           this.cuenta = Cuenta(this.zona);                           
                           this.id_inmueble=miRs.getInt("id_inmueble");
                           this.pendientes=miRs.getInt("pendientes");
                           status = 0;
                }else status = 1;

        }
        catch (SQLException ex)
        {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
         }
    }


    public int inmuebles_usuario(int id_usuario){
        
        int idinmueble=0;
        Connection miConexion = ConectarBD.getConnection();
        ResultSet miRs = null;
        String miQuery = "SELECT id_inmueble FROM inmiueble WHERE usuario=?" ;
      
        try{
            PreparedStatement miStm = (PreparedStatement) miConexion.prepareStatement(miQuery);
            miStm.setInt(1, id_usuario);
            miRs = miStm.executeQuery();
            if (miRs.next()){
            idinmueble = miRs.getInt("id_inmueble");
                          }
            }
            catch (SQLException ex){
            }
        return idinmueble;
    }
    
    public void cargarInmuebleBoleta (int IDBoleta){
        int status;
        Connection miConexion = ConectarBD.getConnection();
        ResultSet miRs1 = null;
        String miQuery1 = "select id_inmueble from impuesto_inmuebles where id_impuesto_inmueble=?" ;
        try{
            PreparedStatement miStm1 = (PreparedStatement) miConexion.prepareStatement(miQuery1);
            miStm1.setInt(1, IDBoleta);
            miRs1 = miStm1.executeQuery();
            miRs1.next();
            int IDInmueble = miRs1.getInt("id_inmueble");
            miRs1.close();
            miStm1.close();
            ResultSet miRs = null;
            String miQuery = "select * from inmueble where id_inmueble=?" ;
            PreparedStatement miStm = (PreparedStatement) miConexion.prepareStatement(miQuery);
            miStm.setInt(1, IDInmueble);
            miRs = miStm.executeQuery();
            if (miRs.next()){
              this.baseImponible = miRs.getFloat("valor_fiscal");
              this.baseImponibleString=this.getBaseImponibleString();
              this.designacionCatastro = miRs.getString("catastro");
              this.direccion = miRs.getString("direccion");
              this.superficie_cubierta=miRs.getFloat("sup_cub");
              this.superficieCubiertaString=this.getSuperficieCubiertaString();
              this.superficie_total=miRs.getFloat("sup_total");
              this.superficieTotalString=this.getSuperficieTotalString();              
              this.id_inmueble=miRs.getInt("id_inmueble");
              this.zona=miRs.getInt("zona");
              this.cuenta = Cuenta(this.zona);
              this.codigo= Codigo(this.cuenta,this.zona);
             status = 0;
            }else status = 1;
        }
        catch (SQLException ex){
          Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void VerInmueble (int IDBoleta){
        int status;
        Connection miConexion = ConectarBD.getConnection();
        ResultSet miRs1 = null;
        String miQuery1 = "select id_inmueble from impuesto_inmuebles where id_impuesto_inmueble=?" ;
        try{
            PreparedStatement miStm1 = (PreparedStatement) miConexion.prepareStatement(miQuery1);
            miStm1.setInt(1, IDBoleta);
            miRs1 = miStm1.executeQuery();
            miRs1.next();
            int IDInmueble = miRs1.getInt("id_inmueble");
            miRs1.close();
            miStm1.close();
            ResultSet miRs = null;
            String miQuery = "select * from inmueble where id_inmueble=?" ;
            PreparedStatement miStm = (PreparedStatement) miConexion.prepareStatement(miQuery);
            miStm.setInt(1, IDInmueble);
            miRs = miStm.executeQuery();
            if (miRs.next()){
              this.baseImponible = miRs.getFloat("valor_fiscal");
              this.baseImponibleString=this.getBaseImponibleString();
              this.designacionCatastro = miRs.getString("catastro");
              this.direccion = miRs.getString("direccion");
              this.superficie_cubierta=miRs.getFloat("sup_cub");
              this.superficieCubiertaString=this.getSuperficieCubiertaString();
              this.superficie_total=miRs.getFloat("sup_total");
              this.superficieTotalString=this.getSuperficieTotalString();              
              this.id_inmueble=miRs.getInt("id_inmueble");
              this.zona=miRs.getInt("zona");
              this.cuenta = Cuenta(this.zona);
              this.codigo= Codigo(this.cuenta,this.zona);
             status = 0;
            }else status = 1;
        }
        catch (SQLException ex){
          Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
     public int buscarPropiedad(String catastro){
        int status = 1;

        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT * FROM inmueble WHERE catastro=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setString(1, catastro);
            miRs = miStm.executeQuery();
            if(miRs.next()) {status = 0;} else status =1;
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return status;
    }

      public int buscarvalor(int zona){
        int valorbuscado = 0;
        
        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT valor FROM zona WHERE idzona=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, zona);
            miRs = miStm.executeQuery();
            miRs.next();           
            valorbuscado = miRs.getInt("valor");
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return valorbuscado;
    }    

    public int insertarPropiedad(int usuario, String calle, String nro, String piso, String depto, String cat1, String cat2, String cat3, String cat4, float superficie_cubierta, float superficie_total, int zona)
    {
        int status = 0;
        float val_fiscal;
        int valorzona = buscarvalor(zona);
        int encontrado = buscarPropiedad(catastro);
        String direccion;
        String catastro;
        
        catastro = cat1 + "-" + cat2 + "-" + cat3 + "-" + cat4;

        direccion = calle +" "+ nro;
        
        if (piso != "")
            direccion = direccion + " - Piso: " + piso;
                
        if (depto != "")
            direccion = direccion + " - Dpto: " + depto;   
        
        direccion = direccion + " - Localidad: Puerto Deseado - Provincia: Santa Cruz";
        
        if (encontrado!=0){
            String query = "INSERT INTO inmueble (usuario, direccion ,catastro , sup_cub, sup_total, valor_fiscal, zona) VALUES (?,?,?,?,?,?,?)";
            Connection miCnx = ConectarBD.getConnection();
            try {
                val_fiscal = (float) ((float)((superficie_cubierta*valorzona) + ((superficie_total-superficie_cubierta)*valorzona*0.5))*0.4);
                PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
                miStm.setInt(1, usuario);
                miStm.setString(2, direccion);
                miStm.setString(3, catastro);
                miStm.setFloat(4, superficie_cubierta);
                miStm.setFloat(5, superficie_total);
                miStm.setFloat(6, val_fiscal);
                miStm.setInt(7, zona);
                status = miStm.executeUpdate();
            } catch (SQLException ex) {
                status=2;
            }
        }
        return status;
    } 
    


public void Crear_Temporal1(){
        
        int i=0;
        Connection miCnx = ConectarBD.getConnection();        
        String query = "drop table municipalidad.temporal1"; 
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            i = miStm.executeUpdate();          
            }catch (Exception e){
               System.out.println("la tabla no se pudo borrar.");
            }
        String query1 = "CREATE  TABLE municipalidad.temporal1 (id INT(11) NOT NULL AUTO_INCREMENT, usuario INT(11) NULL DEFAULT NULL, inmueble INT(11) NULL DEFAULT NULL, catastro VARCHAR(45) NULL DEFAULT NULL, direccion VARCHAR(100) NULL DEFAULT NULL, PRIMARY KEY (id))";
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query1);
            i = miStm.executeUpdate();          
            }catch (Exception e){
               System.out.println("la tabla no se pudo crear.");
            }
}



public Object[][] buscar_prop(String Id){    
        
        Crear_Temporal1();   
        ArrayList<Object []> lista= new ArrayList<Object []>();
        int usu = Integer.parseInt(Id);       
        Connection miCnx = ConectarBD.getConnection();        
        String query = "select * from inmueble where usuario=?"; 
        ResultSet miRs = null; 
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setInt(1, usu);
            miRs = miStm.executeQuery();          
            int i = 0;
            while(miRs.next()){               
               this.id_usuario=miRs.getInt("usuario"); 
               this.id_inmueble=miRs.getInt("id_inmueble");
               this.catastro = miRs.getString("catastro");
               this.direccion = miRs.getString("direccion");
               Object [] data = new Object[]{id_usuario, id_inmueble, catastro, direccion};
               lista.add(data);
            } 
        }catch (Exception e){
               System.out.println("No se puede cargar la lista");
            }        
           Object [][] listaOb = new Object [lista.size()][];
           int i=0;
           Connection miCnx2 = ConectarBD.getConnection();          
           String query2 = "INSERT INTO temporal1 (usuario, inmueble, catastro, direccion) values (?,?,?,?)";           
           for (Object [] ob : lista ) { 
            try{
               PreparedStatement miStm2 = (PreparedStatement) miCnx2.prepareStatement(query2);  
               listaOb[i]=ob ;
               Integer integer = (Integer)ob[0];
               Integer integer1 = (Integer)ob[1];
               miStm2.setInt(1, integer.intValue());   
               miStm2.setInt(2, integer1.intValue());
               miStm2.setString(3, (String)ob[2]);
               miStm2.setString(4, (String)ob[3]);              
               int status = miStm2.executeUpdate();
               i++;            
            }catch (SQLException ex) {
                Logger.getLogger(Propiedades.class.getName()).log(Level.SEVERE, null, ex);
            }
           }
           return listaOb;
        }   

      public int Ver_Id_Prop(String catas){
        int id = 0;
        
        Connection miCnx = ConectarBD.getConnection();
        String query = "SELECT * FROM temporal1 WHERE catastro=?";
        ResultSet miRs = null;
        try {
            PreparedStatement miStm = (PreparedStatement) miCnx.prepareStatement(query);
            miStm.setString(1, catas);
            miRs = miStm.executeQuery();
            miRs.next();           
            id = miRs.getInt("inmueble");
        } catch (SQLException ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
       return id;
    } 
      
public String Cuenta(int zona){

   String zon; 
   String cuenta=new String();
   int cab;
   String cabe;
   String codigo;
   
   if (zona==1)
    cuenta = "098047";
   if (zona==2)
    cuenta = "078158";
   if (zona==3)
    cuenta = "080321";
   if (zona==4)
    cuenta = "073338";
   else 
    cuenta = "062103";

   return cuenta;
}

public String Codigo(String cuenta, int zona){
        
    int cab;
    String cabe;
    String codigo;
    String zon;
    
  zon = Integer.toString(zona);
	cab = zona + 3;
  cabe = Integer.toString(cab); 
        codigo ="0"+ cabe +" - "+ cuenta +" - "+zon;    
    
  return codigo;
    
}

}
    
